package com.jzo2o.common.utils;

import cn.hutool.core.lang.func.Func1;
import cn.hutool.core.lang.func.LambdaUtil;

/**
 * Lambda表达式工具类，继承hutool的LambdaUtil并扩展字段名转换功能
 */
public class LambdaUtils extends LambdaUtil {

    /**
     * 从Lambda Getter/Setter函数中提取字段名，并转换为下划线格式
     * <p>提取规则：</p>
     * <li>getXxxx → xxxx（如getName → name）</li>
     * <li>setXxxx → xxxx（如setName → name）</li>
     * <li>isXxxx → xxxx（如isName → name）</li>
     *
     * @param func Lambda Getter/Setter函数（如 User::getName）
     * @param <T>  函数操作的对象类型
     * @return 下划线格式的字段名；字段名为空时返回null
     * @throws IllegalArgumentException 方法名不满足Getter/Setter规则时抛出
     */
    public static <T> String getUnderLineFieldName(Func1<T, ?> func) throws IllegalArgumentException {
        String fieldName = getFieldName(func);
        return StringUtils.isEmpty(fieldName) ? null : StringUtils.toUnderlineCase(fieldName);
    }
}
